package com.junjiao.util.dao.paging;

/**
 *说明：
 * 
 *扩展查询条件参数,适用外键关联
 * 
 *@创建：作者:Qi 创建时间：Sep 8, 2009
 *@修改历史：[序号](Qi Sep 8, 2009)<修改说明>
 */
public class QueryWhereFK extends QueryWhere {

	private QueryClass queryClass1;// 第一个类

	private QueryClass queryClass2;// 第二个类

	/**
	 * @param queryClass1
	 *            : 第一个类
	 * @param queryClass2
	 *            : 第二个要关联的类
	 */
	public QueryWhereFK(QueryClass queryClass1, QueryClass queryClass2) {
		this.queryClass1 = queryClass1;
		this.queryClass2 = queryClass2;
	}

	/**
	 * 默认就用and连接
	 * 
	 * @param queryClass1
	 *            : 第一个类
	 * @param queryClass2
	 *            : 第二个要关联的类
	 * @param propertyName
	 *            : 第一个类的属性名
	 * @param condition
	 *            : 符号 > = 等
	 * @param propertyValue
	 *            : 第二个要关联的类的属性名
	 */
	public QueryWhereFK(QueryClass queryClass1, QueryClass queryClass2,
			String propertyName, String condition, Object propertyValue) {
		this(queryClass1, queryClass2);
		super.setAndOr("and");
		super.setCondition(condition);
		this.setPropertyName(propertyName);
		this.setPropertyValue(propertyValue);
	}

	/**
	 * 可以选择用and或者or
	 * 
	 * @param queryClass1
	 *            : 第一个类
	 * @param queryClass2
	 *            : 第二个要关联的类
	 * @param andOr
	 *            : AND/OR
	 * @param propertyName
	 *            : 第一个类的属性名
	 * @param condition
	 *            : 符号 > = 等
	 * @param propertyValue
	 *            : 第二个要关联的类的属性名
	 */
	@Deprecated
	public QueryWhereFK(QueryClass queryClass1, QueryClass queryClass2,
			String andOr, String propertyName, String condition,
			Object propertyValue) {
		this(queryClass1, queryClass2);
		super.setAndOr(andOr);
		super.setCondition(condition);
		this.setPropertyName(propertyName);
		this.setPropertyValue(propertyValue);
	}

	/** 获取查询条件是外键的字符串组合 **/
	public StringBuffer getQueryWhereFKStr() {
		StringBuffer sb = new StringBuffer();
		if (super.getPropertyValue() == null
				|| super.getPropertyValue().toString().equals(""))
			return sb;

		return sb.append(super.getAndOr()).append(" ").append(
				super.getPropertyName()).append(" ").append(
				super.getCondition()).append(" ").append(
				super.getPropertyValue());
	}

	/**
	 * 设置第一个类的属性
	 */
	@Override
	public void setPropertyName(String propertyName) {
		super.setPropertyName(queryClass1.getOtherName() + "." + propertyName);
	}

	/**
	 * 设置第二个要关联的类的属性
	 */
	@Override
	public void setPropertyValue(Object propertyValue) {
		super
				.setPropertyValue(queryClass2.getOtherName() + "."
						+ propertyValue);
	}
}
